﻿using System;

namespace _084_委托中的泛型
{
    // 委托类可以包含泛型参数。例如：
    public delegate T Transformer<T>(T arg);
    //根据上面的定义，可以写一个泛化的实体类方法Transform，让它对任何类型都有效：
    public class Util
    {
        public static void Transform<T>(T[] values, Transformer<T> t)
        {
            for (int i = 0; i < values.Length; i++)
            {
                values[i] = t(values[i]);
            }
        }
    }
    class Test
    {
        static int Square(int x) { return x * x; }
        static void Main(string[] args)
        {
            int[] values = { 1, 2, 3 };
            Util.Transform(values, Square); // Square函数中的动态钩子
            foreach(int i in values)
            {
                Console.Write(i+" "); // 1 4 9
            }

            Console.ReadKey();
        }
    }
}